﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using sipfe.model.dataAccess;
using sipfe.model.sqlExecutor;
using System.Data;

namespace sipfe.service.mante
{
    public class CacheCompendio : IDisposable
    {

        private static CacheCompendio singleton = null;
        public static CacheCompendio getInstance()
        {
            if (singleton == null)
            {
                singleton = new CacheCompendio();
            }
            return singleton;
        }
        private static Hashtable hashtableRegiones = null;

        private static Hashtable getHashtableRegiones()
        {
            if (hashtableRegiones == null)
            {
                hashtableRegiones = new Hashtable();
            }
            return hashtableRegiones;
        }

        private static Hashtable hashtableCompendio = new Hashtable();
        //private static Hashtable hashtableRegiones = new Hashtable();
        

        

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (hashtableRegiones != null)
                {
                    hashtableRegiones = null;
                }
            }
        }

        public List<SIPDetCompendio> getListCompendioById(int id)
        {
            List<SIPDetCompendio> lista = new List<SIPDetCompendio>(); 
            SIPDetCompendio sipDetCompendio = null;
            bool existe = false;

            if (    hashtableCompendio !=null   )
            {
                if (hashtableCompendio.Contains(id))
                {
                    existe = true;
                    lista = (List<SIPDetCompendio>)hashtableCompendio[id];
                }
            }

            if (!existe)
            {

                String[] parametros = new String[] { id.ToString() };
                String[] nombreParametros = new String[] { "idCompendio" };
                IList<dynamic> listaDynamic = SqlExecutorSP.executeStore("paListarCompendioById", parametros, nombreParametros);
                foreach (dynamic item in listaDynamic)
                {
                    sipDetCompendio = new SIPDetCompendio();
                    sipDetCompendio.nIdeDetalle = item.nIdeDetalle;
                    sipDetCompendio.vNomCorto = item.vNomCorto;
                    lista.Add(sipDetCompendio);
                }
                hashtableCompendio.Add(id, lista);
            }
           
            return lista;
        }

        public List<SIPMaeDependencia> getListRegiones(int id)
        {
            List<SIPMaeDependencia> lista = new List<SIPMaeDependencia>();
            SIPMaeDependencia sipMaeDependencia = null;

            if (hashtableRegiones != null)
            {
                if (hashtableRegiones.Contains(id))
                {
                    lista = (List<SIPMaeDependencia>)hashtableRegiones[id];
                }
            }
            else
            {
                String[] parametros = new String[] { id.ToString() };
                String[] nombreParametros = new String[] { "nIdeTipoDep" };
                IList<dynamic> listaDynamic = SqlExecutorSP.executeStore("paListarDependenciaByTipo", parametros, nombreParametros);
                foreach (dynamic item in listaDynamic)
                {
                    sipMaeDependencia = new SIPMaeDependencia();
                    sipMaeDependencia.nIdeDep = item.nIdeDep;
                    sipMaeDependencia.vDescRegion = item.vDescRegion;
                    lista.Add(sipMaeDependencia);
                }
                getHashtableRegiones().Add(id, lista);
            }
            return lista;
        }

        public void anulaHasTable()
        {

        }



    }
}
